import request, { ApiResponse } from './request'
import type { Permission } from './permissions'

// 用户信息（根据 API 响应定义）
export interface UserData {
  id: string
  username: string
  nickname: string
  email: string
  phone: string
  is_admin: number
  status: number
  created_at?: string // 创建时间（可选，某些接口可能不返回）
  updated_at?: string // 更新时间（可选，某些接口可能不返回）
}

// 用户详情（包含权限信息）
export interface UserDetailData extends UserData {
  permissions?: Permission[]
}

// 创建用户参数
export interface CreateUserParams {
  username: string
  password: string
  nickname?: string
  email?: string
  phone?: string
  permission_ids?: string[]
}

// 更新用户参数
export interface UpdateUserParams {
  id: string
  password?: string // 新密码（可选）
  nickname?: string
  email?: string
  phone?: string
  status?: number
  permission_ids?: string[]
}

// 删除用户参数
export interface DeleteUserParams {
  id: string
}

// 删除用户响应
export interface DeleteUserResponse {
  message: string
}

// 用户列表查询参数
export interface UserListParams {
  page?: number
  pageSize?: number
  username?: string
  status?: number
}

// 用户列表响应
export interface UserListResponse {
  list: UserData[]
  total: number
  page: number
  pageSize: number
}

// 用户详情参数
export interface UserDetailParams {
  id: string
}

// 创建用户
export const createUser = (data: CreateUserParams): Promise<ApiResponse<UserData>> => {
  return request.post<UserData>('/users/create', data)
}

// 更新用户
export const updateUser = (data: UpdateUserParams): Promise<ApiResponse<UserData>> => {
  return request.post<UserData>('/users/update', data)
}

// 删除用户
export const deleteUser = (data: DeleteUserParams): Promise<ApiResponse<DeleteUserResponse>> => {
  return request.post<DeleteUserResponse>('/users/delete', data)
}

// 获取用户列表
export const getUserList = (data?: UserListParams): Promise<ApiResponse<UserListResponse>> => {
  return request.post<UserListResponse>('/users/list', data || {})
}

// 获取用户详情
export const getUserDetail = (data: UserDetailParams): Promise<ApiResponse<UserDetailData>> => {
  return request.post<UserDetailData>('/users/detail', data)
}

